Kapitel 19 Weitere Steuerelemente
Einige Windows-Komponenten, die in der Lage sind, automatisch Bildlaufleisten am Rand ihres Clientbereichs bereitzustellen, habe ich Ihnen in den vergangenen Kapiteln bereits vorgestellt. Die Klasse TextBox gehört ebenso wie die Klasse Form dazu.
19.1 Bildlaufleisten mit »HScrollBar« und »VScrollBar«
 
Mit den beiden Klassen HScrollBar und VScrollBar stellt Ihnen das .NET Framework zwei Klassen zur Verfügung, um in einem bestimmten Bereich stufenlos oder in vordefinierten Sprüngen Werte einzustellen, die von anderen Komponenten ausgewertet werden können. Beide Klassen lassen sich auf die gemeinsame Basisklasse ScollBar zurückführen, die ihrerseits ein direkter Abkömmling von Control ist.
HScrollBar stellt eine horizontale Bildlaufleiste bereit, VScrollBar eine vertikale. Das sind aber auch schon die einzigen Unterscheidungsmerkmale, denn in allen anderen Fähigkeiten gibt es keine Unterschiede.
Die Eigenschaften
Nur insgesamt fünf Eigenschaften müssen wir kennen, um die Fähigkeiten der Bildlaufleisten nutzen zu können. Mit einem Schieberegler, der auch als Bildlauffeld bezeichnet wird, kann man eine Wertskala zwischen einem definierten Minimum und einem Maximum durchlaufen. Die aktuelle Position des Bildlauffeldes zwischen den beiden Pfeiltasten wird durch die Eigenschaft Value beschrieben. Klickt der Benutzer auf eine der beiden Pfeiltasten, ändert sich Value um einen Wert, der in SmallChange festgelegt ist, bei einem Klick in den Bereich zwischen dem Bildlauffeld und einer Pfeiltaste um LargeChange.
Wenn Sie den Wert für Maximum festlegen, wird dieser von Value zur Laufzeit nicht erreicht, sondern ist von der Eigenschaft LargeChange abhängig. Tatsächlich reicht der Wertebereich nur von Minimum bis
| Maximum – LargeChange + 1
|
Es stellt sich nun die Frage, warum der Maximalwert von Value eine anderer ist, als in Maximum eingestellt wird. Stellen Sie sich dazu ein Dokument vor, das 1000 Zeilen Text enthält, die von 0 bis 999 indiziert sind. Nehmen wir an, dass auf einer Seite 25 Zeilen angezeigt werden können. Um mit einem Mausklick von Seite zu Seite zu navigieren, legen Sie den Wert LargeChange=25 fest.
Wird die erste Seite angezeigt, handelt es sich um die Zeilen 0 bis 24. Dafür steht Value=0. Wird um LargeChange gescrollt, werden die Zeilen 25 bis 49 angezeigt. In diesem Moment hat Value den Wert 25. Die letzten 25 Zeilen des Dokuments (975 bis 999) werden angezeigt, wenn Value=975 aufweist. Der Maximalwert wird also überhaupt nicht benötigt, um durch das gesamte Dokument navigieren zu können.
Tabelle 19.1 Eigenschaften der Klasse »ScrollBar«
| Eigenschaft
|
Beschreibung
|
| Value
|
Legt die aktuelle Position des Bildlauffeldes fest.
|
| Minimum
|
Enthält den Minimalwert.
|
| Maximum
|
Enthält den Maximalwert.
|
| SmallChange
|
Ruft den Wert ab, der zur Value-Eigenschaft addiert oder von dieser subtrahiert werden soll, wenn das Bildlauffeld um einen kleinen Abstand verschoben wird.
|
| LargeChange
|
Ruft einen Wert ab, der zur Value-Eigenschaft addiert oder von dieser subtrahiert werden soll, wenn das Bildlauffeld um einen größeren Abstand verschoben wird.
|
Die Ereignisse
Von der Basisklasse ScrollBar erben die beiden abgeleiteten Klassen zwei wichtige Ereignisse: ValueChanged und Scroll. In den meisten Fällen werden Sie das Ereignis ValueChanged behandeln, das immer dann auftritt, wenn sich die Eigenschaft Value der Bildlaufleiste geändert hat:
| public event EventHandler ValueChanged;
|
Am Typ EventHandler können Sie erkennen, dass das Ereignis keine Informationen an den Ereignishandler weiterleitet.
Etwas anders verhält sich das Ereignis Scroll. Es tritt nur dann auf, wenn das Bildlauffeld mit der Tastatur oder der Maus verschoben wird. Wird mit Programmcode ein neuer Wert eingestellt, wird Scroll nicht ausgelöst.
| public event ScrollEventHandler Scroll;
|
Das Objekt ScrollEventArgs liefert in seiner Eigenschaft NewValue den neu eingestellten Wert der Bildlaufleiste, über OldValue den alten. Über die Eigenschaft Type erhalten Sie auch weitergehende Informationen, beispielsweise die Ursache der Wertänderung oder ob sich das Bildlauffeld in seiner maximalen oder minimalen Position befindet.
Wird das Bildlauffeld mit der Tastatur oder der Maus verschoben, kommt es zu der Ereigniskette Scroll/ValueChanged/Scroll. Dabei zeigt sich, dass Value bei der ersten Auslösung von Scoll noch den alten Wert hat, bei der zweiten Auslösung den neuen.
Ein Beispielprogramm
Im folgenden Beispiel dient eine Instanz des Steuerelements PictureBox dazu, eine Fläche mit einer Hintergrundfarbe darzustellen, deren Rot-, Grün- und Blauanteil mittels Bildlaufleisten stufenlos eingestellt werden kann. Die Eigenschaft Minimum der Bildlaufleisten steht auf 0, SmallChange auf 1 und LargeChange auf 15. Da Value den Wert 255 erreichen muss, berechnet sich Maximum zu:
| 255 + LargeChange – 1 = 269
|
Die Werte der drei Bildlaufleisten werden der statischen Methode FromArgb der Klasse Color übergeben, um daraus den passenden Farbwert zu generieren.
 Hier klicken, um das Bild zu vergrößern
Abbildung 19.1 Formular des Beispiels »ScrollBarDemo«
| // ---------------------------------------------------------
|
| // Beispiel: ...\Kapitel 19\ScrollBarDemo
|
| // ---------------------------------------------------------
|
| public partial class Form1 : Form {
|
| private void SetColor(object sender, EventArgs e) {
|
| pictureBox1.BackColor = Color.FromArgb(ScrollRed.Value,
|
| ScrollGreen.Value,
|
| ScrollBlue.Value);
|
| label1.Text = Convert.ToString(ScrollRed.Value);
|
| label2.Text = Convert.ToString(ScrollGreen.Value);
|
| label3.Text = Convert.ToString(ScrollBlue.Value);
|
| }
|
| }
|
|